Computers are everywhere in today's society. They come in all different varieties and can be found in places such as automobiles, laptops or home personal computers, banks, personal digital assistants, cell phones, and servers. In addition, as computers become more commonplace and software becomes more complex, there is a need for the computing devices to process more data at faster speeds using a smaller package and less power. Newer computing systems often have multiple processors with multiple processing cores running at higher operating frequencies than previous generations of processors, which often results in an increase in processing power for the processor. For example, newer server devices may run a plurality of such multi-core processors.
To take advantage of these multi-processor and multi-core processor systems, an emphasis in parallel computing has arisen. Parallel processing involves the breaking up of tasks into smaller ones and then distributing the tasks amongst the multiple processors and processor cores. The tasks are each completed independently and the results are then combined. This allows for large computational tasks to be completed in an efficient manner.
In order to synchronize these parallel computations, a system-wide time reference is typically used. In general, this system-wide time reference (referred to herein as a “real-time reference” or “system TICK” (STICK)) increments at a constant rate independent of processor or processor core clock frequencies such that the STICK can utilized by one or more programs to determine real-time. Thus, even a plurality of processors and multi-core processors operating at different clock rates may still perform parallel operations by referencing the STICK clock signal. The STICK may also be utilized by the processors to determine a real-time clock signal to pace the executing applications to real-time.
Some STICK implementations are based on a distributed scheme based on a common external crystal oscillator, with each processor or each processor core individually keeping its own copy of STICK. When a server or cluster is started, each copy of STICK is set at zero and started at approximately the same time. This may be done by broadcasting a signal to all of the processors to start their respective STICK counters over a dedicated wire to a reset pin on each processor. This allows for all of the STICK counters to be approximately equal.
If different groups of STICK registers operate on different crystal oscillators, over time the STICK clock for one or more of the processors or processor core may begin to drift such that the STICK clock is not synchronized between the processors. Significant clock drift can impact software behavior, possibly leading to a crash of the system. It is with these and other issues in mind that various aspects of the present disclosure were developed.